package com.by.rpc.registry;

import com.by.rpc.config.RegistryConfig;
import com.by.rpc.model.ServiceMetaInfo;

import java.util.List;

/**
 * 注册中心
 *
 * @author lzh
 */
public interface Registry {

    /**
     * 初始化
     *
     * @param registryConfig 注册中心配置
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务
     *
     * @param serviceMetaInfo 服务信息
     * @throws Exception 异常信息
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务
     *
     * @param serviceMetaInfo 服务信息
     * @throws Exception 异常信息
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 服务发现（获取某个服务下的所有节点）
     *
     * @param serviceKey 服务key
     * @return 节点列表
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     * 销毁
     */
    void destroy();

    /**
     * 心跳检测
     */
    void heartBeat();

    /**
     * 监听服务节点变化
     *
     * @param serviceNodeKey 服务节点key
     */
    void watch(String serviceNodeKey);
}
